package com.lzj.optimization;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class HelloOptimization {
    //获取HBase管理员类
    private Admin admin;
    //获取数据库连接
    private Connection connection;
    //获取表信息
    private Table table;

    /**
     * 预先创建Region
     *
     * @throws IOException
     */
    @Test
    public void createTableRegions() throws IOException {
        TableDescriptorBuilder table = TableDescriptorBuilder.newBuilder(TableName.valueOf("lzj:calllog"));
        ColumnFamilyDescriptorBuilder infoCF = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("info"));
        table.setColumnFamily(infoCF.build());
        /**
         * 1、中国移动号段为：134、135、136、137、138、139、147、148、150、151、152、157、158、159、178、182、183、184、187、188、198、1440、1703、1705、1706
         *
         * 2、中国联通号段为：130、131、132、155、156、185、186、145、146、166、167、175、176、1704、1707、1708、1709、1710、1711、1712、1713、1714、1715、1716、1717、1718、1719
         *
         * 3、中国电信号段为：133、153、177、180、181、189、191、191、1349、1410、1700、1701、1702、1740 。
         */
        byte[][] splits = {
                Bytes.toBytes("133"),
                Bytes.toBytes("153"),
                Bytes.toBytes("177"),
                Bytes.toBytes("180"),
                Bytes.toBytes("181"),
                Bytes.toBytes("189"),
                Bytes.toBytes("191")
        };
        admin.createTable(table.build(), splits);
    }

    @Before
    public void init() throws IOException {
        Configuration configuration = HBaseConfiguration.create();
        this.connection = ConnectionFactory.createConnection(configuration);
        this.admin = connection.getAdmin();
        //获取数据库表信息
        table = this.connection.getTable(TableName.valueOf("lzj:calllog"));
    }

    @After
    public void destory() throws IOException {
        if (admin != null) {
            admin.close();
        }
        if (table != null) {
            table.close();
        }
        if (connection != null) {
            connection.close();
        }
    }

}
